#ifndef __ABSTRACTFACTORY__
#define __ABSTRACTFACTORY__

#include "Product.h"

class AbstractFactory
{
	public:
		AbstractFactory() {};
		virtual ~AbstractFactory() {};

		virtual Product* CreateProduct() = 0;
		virtual int DestroyProduct(Product* p);
};

class FactoryA : public AbstractFactory
{
	public:
		FactoryA() {};
		virtual ~FactoryA() {};

		virtual Product* CreateProduct();
};

class FactoryB : public AbstractFactory
{
	public:
		FactoryB() {};
		virtual ~FactoryB() {};

		virtual Product* CreateProduct();
};

#endif
